﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Kopytko.BoardGame
{
    public class ChessLogic : BoardLogic
    {
        protected Plansza PlanszaGry;
        public WynikRuchu WynikOstatniegoRuchu;
        private Color AktualnyGracz;
        public override void Init()
        {
            PlanszaGry = new Plansza();
            WynikOstatniegoRuchu = WynikRuchu.Normalny;
            AktualnyGracz = Color.White;
        }

        public override GameBase.IPlayer WhoTurnIs()
        {
            throw new NotImplementedException();
        }

        public override IEnumerable<BoardPosition> GetAvailableMovements(BoardPosition currentPosition)
        {
            Figura Aktualna = PlanszaGry.PobierzFigureZPola(BoardPosition2Pole(currentPosition));
            List<Ruch> LegalneRuchy = Aktualna.PobierzLegalneRuchy(PlanszaGry);
            List<BoardPosition> LegalnePozycje = new List<BoardPosition>();
            foreach (Ruch Legalny in LegalneRuchy)
            {
                LegalnePozycje.Add(Pole2BoardPosition(Legalny.GetDokad()));
            }
            return LegalnePozycje;
        }

        public override bool IsMoveAllowed(BoardPosition currentPosition)
        {
            Figura Aktualna = PlanszaGry.PobierzFigureZPola(BoardPosition2Pole(currentPosition));
            return Aktualna.PobierzLegalneRuchy(PlanszaGry).Count > 0;
        }

        public override MoveResult Move(BoardPosition currentPosition, BoardPosition destPosition)
        {
            MoveResult result = new MoveResult();

            bool Rezultat = !PlanszaGry.PobierzFigureZPola(BoardPosition2Pole(destPosition)).JestPuste();
            Ruch Wykonywany = new Ruch(BoardPosition2Pole(currentPosition), BoardPosition2Pole(destPosition));
            PlanszaGry.WykonajRuch(Wykonywany);
            WynikOstatniegoRuchu = PlanszaGry.AnalizujWynikRuchu(Wykonywany);
            AktualnyGracz = Color.Przeciwnik(AktualnyGracz);

            //result.CurrentPlayer = AktualnyGracz

            return result;            
        }

        private Pole BoardPosition2Pole(BoardPosition boardPosition)
        {
            return new Pole(boardPosition.X, boardPosition.Y);
        }

        private BoardPosition Pole2BoardPosition(Pole pole)
        {
            return new BoardPosition((byte)pole.GetX(), (byte)pole.GetY());
        }
    }
}
